#include <iostream>
#include <string>
#include <vector>
#include <sw/redis++/redis.h>
#include <chrono>
#include <thread>
using std::cin;
using std::cout;
using std::endl;
using std::iostream;
using std::string;
using std::vector;

using namespace sw::redis;

template <class T>
void print(T &arr)
{

    for (auto it : arr)
    {
        cout << it << endl;
    }
}
template <class T>
void printoptional(const T &t)
{

    for (auto const &x : t)
    {

        if (x.has_value())
        {
            cout << x.value() << endl;
        }
    }
}

void test_hset_hget_hdel_exists(Redis &redis)
{

    redis.flushall();

    redis.hset("key1", {std::make_pair("1", "2"), std::make_pair("2", "3")}); // 也可以pair类型迭代器
    cout << "个数: " << redis.exists("key1") << endl;
    cout << redis.hget("key1", "1").value() << endl;
    redis.hdel("key1", "1");
    cout << "个数: " << redis.exists("key1") << endl;
}


void test_hmset_hmget_hkeys_hvals(Redis&redis){
redis.flushall();

    redis.hmset("key1", {std::make_pair("1", "2"), std::make_pair("2", "3")}); // 也可以pair类型迭代器
    vector<std::string> vp;
    auto bt=std::back_inserter(vp);
    redis.hmget("key1",{"1","2"},bt);
    cout<<" hmget : "<<endl;
    print(vp);
    vp.clear();
    bt=std::back_inserter(vp);
    redis.hkeys("key1",bt);
    cout<<" hmkeys : "<<endl;

    print(vp);
    vp.clear();
    bt=std::back_inserter(vp);
    redis.hvals("key1",bt);
    cout<<" hmget : "<<endl;

    print(vp);
}

int main()
{

    Redis redis("tcp://127.0.0.1:6379");
    redis.command("select", 6);
 //test_hset_hget_hdel_exists(redis);

 test_hmset_hmget_hkeys_hvals(redis);
    return 0;
}
